home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / datagrps.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  22KB  |  1,004 lines

  1. /*
  2.  * DataGrps.c
  3.  *
  4.  * Purpose:
  5.  * --------
  6.  *    Gestion des unit‚s de "disque" virtuelles
  7.  *
  8.  * History:
  9.  * --------
  10.  * fplanque: Created
  11.  */
  12.  
  13.      #include "!OPTIONS.H"                /* Options de compilation */         
  14.     #define    THIS_FILE    "DATAGRPS.C v1.00 - 03.95"
  15.           
  16.  
  17. /*
  18.  * System headers:
  19.  */
  20.     #include    <stdio.h>                /* header standard */
  21.     #include    <stdlib.h>                /* header librairie de fnct std */
  22.     #include <string.h>                /* Strlen... */
  23.     #include    <ext.h>                    /* MAXPATH... */
  24.    
  25.  
  26. /*
  27.  * Custom headers:
  28.  */
  29.     #include    "SPEC_PU.H"
  30.     #include "S_MALLOC.H"
  31.     #include    "DESK_PU.H"            /* Pour connaitre offset des icones de datas */
  32.     #include    "STUT_ONE.RSC\STUT_3.H"
  33.     #include "AESDEF.H"
  34.     #include    "DEBUG_PU.H"    
  35.     #include "DATPG_PU.H"
  36.     #include "DTDIR_PU.H"
  37.     #include "DATAGRPS.H"
  38.     #include "OBJCT_PU.H"
  39.     #include "FILES_PU.H"
  40.  
  41.     /*
  42.      * Treeedit
  43.      */
  44.     void    efface_arbodir( DATADIR *datadir );
  45.  
  46.  
  47.    
  48. /*
  49.  * External variables: 
  50.  */
  51.     /* 
  52.      * Ic“nes: 
  53.      */
  54.     extern    OBJECT        *G_desktop_adr;        /* Ptr sur arbre bureau */
  55.     extern    WIPARAMS        *G_desk_params_adr;    /* ParamŠtres de la "fenˆtre bureau" */
  56.     /* 
  57.      * Fenˆtres
  58.      */
  59.     extern    WIPARAMS        *G_wi_list_adr;    /* Adresse de l'arbre de paramŠtres */
  60.     /* 
  61.      * Fichiers: 
  62.      */
  63.     extern    char    G_filename[ 13 ];            /* Nom du fichier … charger ex:TEST.TXT */
  64.     extern    char    G_filepath[ MAXPATH ];    /* Chemin du fichier … charger ex:D\EXEMPLE */
  65.     /* 
  66.      * Desktop: 
  67.      */
  68.     extern    DATAGROUP    *    G_datagroups;        /* Pointeur sur tableau de G_datagroups */
  69.     extern    WIPARAMS        *    G_selection_adr;    /* S‚lection courante */
  70.  
  71.  
  72. /*
  73.  * ---------------------------- METHODES ------------------------------
  74.  */
  75.  
  76. /*
  77.  * DataGrp_Reset(-)
  78.  *
  79.  * Purpose:
  80.  * --------
  81.  * Efface toutes les donn‚es d'un DATAGROUP
  82.  * et le remet en SSTATE_EMPTY
  83.  *
  84.  * History:
  85.  * --------
  86.  * 26.12.94: fplanque: Extracted from mouvement(); nombreuses optimisations
  87.  */
  88. BOOL    DataGrp_Reset(                        /* Out: != FALSE si on a effectu‚ le reset */
  89.             DATAGROUP *    pDataGroup )    /* In:  DataGroup */
  90. {
  91.     /* 
  92.      * Etat du groupe: 
  93.      */
  94.     SSTATE    sstate_dgrp    = dataGroup_getSavState( pDataGroup );
  95.  
  96.     static char    *    conf1 ="[2][|  EFFACER toutes les|  PAGES-CRAN de la|  m‚moire?][Confirmer|Annuler]";
  97.     static char    *    conf2 ="[2][ATTENTION: en EFFA€ANT,|toutes les modifications|en cours sur les PAGES-|CRAN en m‚moire vont ˆtre|irr‚m‚diablement perdues!][Confirmer|Annuler]";
  98.     char            *    replace;    /* Chaine de remplacement */
  99.     int                resultat = 0;
  100.  
  101.     /* 
  102.      * Selon state: 
  103.      */    
  104.     switch( sstate_dgrp )
  105.     {
  106.         case SSTATE_MODIFIED:
  107.             /*
  108.              * Adapte texte au type de donn‚es: 
  109.              */
  110.             switch( pDataGroup -> DataType )
  111.             {
  112.                 case    DTYP_ARBO:
  113.                     replace = "'ARBO      |en m‚moire vont ˆtre    ";
  114.                     break;
  115.                     
  116.                 case    DTYP_PAGES:
  117.                     replace = "es PAGES-|CRAN en m‚moire vont ˆtre";
  118.                     break;
  119.                     
  120.                 case    DTYP_DATAS:
  121.                     replace = "es DONNES |en m‚moire vont ˆtre    ";
  122.                     break;
  123.  
  124.                 case    DTYP_TEXTS:
  125.                     replace = "es TEXTES  |en m‚moire vont ˆtre    ";
  126.                     break;
  127.  
  128.                 case    DTYP_PICS:
  129.                     replace = "es IMAGES  |en m‚moire vont ˆtre    ";
  130.                     break;
  131.             }
  132.             memcpy( conf2 + 67, replace, 36);
  133.  
  134.             /*
  135.              * Demande confirmation: 
  136.              */
  137.             resultat=form_alert( 2, conf2 );
  138.             break;
  139.  
  140.         case SSTATE_SAVED:
  141.             /*
  142.              * Adapte texte au type de donn‚es: 
  143.              */
  144.             switch( pDataGroup -> DataType )
  145.             {
  146.                 case    DTYP_ARBO:
  147.                     replace = "te     |  l'ARBO de la     ";
  148.                     break;
  149.                     
  150.                 case    DTYP_PAGES:
  151.                     replace = "tes les|  PAGES-CRAN de la";
  152.                     break;
  153.                     
  154.                 case    DTYP_DATAS:
  155.                     replace = "tes les|  DONNES de la    ";
  156.                     break;
  157.                     
  158.                 case    DTYP_TEXTS:
  159.                     replace = "s les  |  TEXTES de la     ";
  160.                     break;
  161.                     
  162.                 case    DTYP_PICS:
  163.                     replace = "tes les|  IMAGES de la     ";
  164.                     break;
  165.             }
  166.             memcpy( conf1 + 18, replace , 27);
  167.  
  168.             /*
  169.              * Demande confirmation: 
  170.              */
  171.             resultat=form_alert( 1, conf1 );
  172.             break;
  173.     }
  174.                     
  175.     if( resultat == 1 )
  176.     {
  177.         if( efface_datas( pDataGroup ) )
  178.         {    /*
  179.              * Si on a supprim‚ 
  180.              */
  181.             return    TRUE_1;
  182.         }
  183.     }
  184.     
  185.     return    FALSE0;
  186. }
  187.  
  188.  
  189. /*
  190.  * sauve_DataGroup(-)
  191.  *
  192.  * Purpose:
  193.  * --------
  194.  * Sauve un DATAGROUP dans son
  195.  * fichier de pages-arbo/‚cran/textes/images
  196.  *
  197.  * History:
  198.  * --------
  199.  * 1993: fplanque: Created
  200.  * 19.06.94: fplanque: Gestop, textes & images
  201.  * 02.09.94: support des fichiers de pages vid‚otex
  202.  */
  203. int    sauve_DataGroup(                      /* Out: Indique si la sauvegarde s'est correctement effectuée */
  204.             DATAGROUP    *curr_datagroup )    /* In: DATAGROUP … s‚rialiser */
  205. {
  206.     DATADIR    *datadir = curr_datagroup -> root_dir;    /* Dir ppal du datagroup */
  207.     int        save_ok = 0;                     /* Sauvegarde OK */
  208.     FTA        fta;                                /* File Transfer Area */
  209.  
  210.     /*
  211.      *    Fixe FTA sur DATADIR … sauver: 
  212.      */
  213.     fta .datadir = datadir;
  214.  
  215.     /*
  216.      * Fixe le chemin de s‚lection du prochain fichier sur disque: 
  217.      */
  218.     recall_filepath( curr_datagroup );
  219.  
  220.     /*
  221.      * Sauvegarde des donn‚es: 
  222.      */
  223.     switch( curr_datagroup -> DataType )
  224.     {
  225.         case    DTYP_ARBO: 
  226.             save_ok = save_file( "Sauver l'arborescence", FS_ARBO, &fta );
  227.             break;
  228.  
  229.         case    DTYP_PAGES:
  230.             save_ok = save_file( "Sauver les pages ‚cran", FS_PAGES_ECRAN, &fta );
  231.             break;
  232.         
  233.         case    DTYP_DATAS:
  234.             save_ok = save_file( "Sauver les bases de donn‚es", FS_DATAS, &fta );
  235.             break;
  236.         
  237.         case    DTYP_TEXTS:
  238.             save_ok = save_file( "Sauver les textes", FS_TEXTES, &fta );
  239.             break;
  240.  
  241.         case    DTYP_PICS:
  242.             save_ok = save_file( "Sauver les images", FS_IMAGES, &fta );
  243.             break;
  244.         
  245.         default:
  246.             signale("Sauvegarde impossible!");
  247.             /* printf("type=%d\n",curr_datagroup -> type); */
  248.     }
  249.             
  250.     /*
  251.      * Mise … jour des fenˆtres et des infos de la zone de donn‚es: 
  252.      */
  253.     if ( save_ok )
  254.     {    /*
  255.          * Si la sauvegarde s'est correctement effectu‚e: 
  256.          * Status mise … jour: 
  257.          */
  258.         dataGroup_setSaved( curr_datagroup );
  259.  
  260.         /*
  261.          * M‚mo nom du fichier: 
  262.          */
  263.         if ( save_ok == 2 )
  264.         {
  265.             update_datagroup_filename( curr_datagroup );
  266.         }
  267.     }
  268.  
  269.     return    save_ok;
  270.  
  271. }
  272.  
  273.  
  274.  
  275. /*
  276.  * get_serv_state(-)
  277.  *
  278.  * Purpose:
  279.  * --------
  280.  * Retourne info sur le contenu de tous les Datagroups du serveur
  281.  *
  282.  * History:
  283.  * --------
  284.  * 1993: fplanque: Created
  285.  * 08.08.94: retourne un SSTATE
  286.  */
  287. SSTATE    get_ServSState( void )     /* Out: SSTATE global...*/
  288. {
  289.     /*
  290.      * Variables: 
  291.      */
  292.     int            plein   = FALSE0;    /* A priori, aucun groupe plein */
  293.     int            modifie = FALSE0;    /* A priori, aucun groupe modifi‚ */
  294.     int            group_no;            /* Num‚ro du groupe en cours de traitement */
  295.  
  296.     /*
  297.      * Examine tous les groupes: 
  298.      */
  299.     for( group_no = 0; group_no < NB_DATAGROUPS; group_no ++ )
  300.     {
  301.         switch( dataGroup_getSavState( &G_datagroups[ group_no ] ) )
  302.         {    /*
  303.              * Selon l'‚tat du groupe: 
  304.              */
  305.             case    SSTATE_MODIFIED:
  306.                 modifie = TRUE_1;
  307.                 break;
  308.                 
  309.             case    SSTATE_SAVED:
  310.                 plein = TRUE_1;
  311.                 break;
  312.         }
  313.     }
  314.  
  315.     /*
  316.      * Retourne ‚tat global du serveur: 
  317.      */
  318.     if ( modifie )
  319.     {
  320.         return    SSTATE_MODIFIED;        /* Modifi‚ */
  321.     }
  322.     else if ( plein )
  323.     {
  324.         return    SSTATE_SAVED;            /* Plein */
  325.     }
  326.         
  327.     return    SSTATE_EMPTY;                /* Vide */
  328. }
  329.  
  330.  
  331.  
  332. /*
  333.  * dataGroup_getSavState(-)
  334.  *
  335.  * Purpose:
  336.  * --------
  337.  * Retourne Information sur le contenu d'un datagroup
  338.  *
  339.  * History:
  340.  * --------
  341.  * fplanque: Created
  342.  * 08.08.94: renvoie maintenant un SSTATE, chang‚ nom: get_datastate -> dataGroup_getSavState
  343.  */
  344. SSTATE     dataGroup_getSavState(         /* Out: SSTATE correspondant */
  345.                 DATAGROUP *datagroup )    /* In: DATAGROUP qui nous int‚resse */
  346. {
  347.     return    dataDir_getSavState( datagroup -> root_dir );
  348. }
  349.  
  350.  
  351.  
  352. /*
  353.  * DataGroups_SaveAll(-)
  354.  *
  355.  * Purpose:
  356.  * --------
  357.  * Sauvegarde de tous les fichiers avec dialogue utilisateur
  358.  *
  359.  * History:
  360.  * --------
  361.  * 02.10.94: fplanque: Created
  362.  */   
  363. void    DataGroups_SaveAll( void )
  364. {
  365.     int                no_group;
  366.     DATAGROUP    *    pDataGroup;
  367.  
  368.     for( no_group = 0; no_group < NB_DATAGROUPS; no_group ++ )
  369.     {
  370.         pDataGroup = &G_datagroups[ no_group ];
  371.         
  372.         if( dataGroup_getSavState( pDataGroup ) == SSTATE_MODIFIED )
  373.         {    /*
  374.              * Un groupe a ‚t‚ modifi‚ mais pas sauv‚: 
  375.              */
  376.             sauve_DataGroup( pDataGroup );
  377.         }
  378.     }
  379. }
  380.  
  381.  
  382. /*
  383.  * dataGroup_setSaved(-)
  384.  *
  385.  * Purpose:
  386.  * --------
  387.  * M‚morise le fait que tout le DATAGROUP a ‚t‚ sauv‚
  388.  * Redraw des ic“nes...
  389.  *
  390.  * History:
  391.  * --------
  392.  * 08.08.94: fplanque: Created
  393.  * 02.10.94: enfin impl‚m‚nt‚ la modif statut dir ppal
  394.  */
  395. void dataGroup_setSaved(
  396.             DATAGROUP    *    pDataGroup )    /* In: Datagroup qui a ‚t‚ sauv‚ */
  397. {
  398.     /*
  399.      * Trouve dir ppal:
  400.      */
  401.     DATADIR *    pDataDir = pDataGroup -> root_dir;
  402.  
  403.     /* 
  404.      * Signale qu'il est sauv‚
  405.      */
  406.     dataDir_setSavState( pDataDir, SSTATE_SAVED,    TRUE_1 );
  407. }
  408.  
  409.  
  410.  
  411.  
  412.  
  413. /*
  414.  * DataGrp_MergeFile(-)
  415.  *
  416.  * Purpose:
  417.  * --------
  418.  * Charge un fichier de DATAPAGEs dans un DATAGROUP
  419.  * (Le contenu pr‚c‚dent du DATAGROUP est conserv‚)
  420.  *
  421.  * Algorythm:
  422.  * ----------  
  423.  * - Init FTA
  424.  * - En fonction du type de données:
  425.  *        Appelle load_file() avec paramŠtres appropri‚s.
  426.  * - Si le chargement s'est effectu‚: UPDATE
  427.  *
  428.  * History:
  429.  * --------
  430.  * 1993: fplanque: Created
  431.  * 09.08.94: modif valeur de retour
  432.  */
  433. int    DataGrp_MergeFile( 
  434.             DATAGROUP *curr_datagroup )    /* In: DATAGROUP ds lequel on veut charger */
  435. {
  436.     FTA        fta; 
  437.     DATATYPE    type = curr_datagroup -> DataType;    /* Type de donn‚es … charger */
  438.     int        load_ok;                                         /* Chargement r‚ussi */
  439.  
  440.     /* 
  441.      * Fixe infos File Transfer Area: 
  442.      */
  443.     fta .datadir_ptr = &(curr_datagroup -> root_dir);    /* Adr du Ptr sur Dir ppal du datagroup */
  444.  
  445.     /* 
  446.      * Chargement des donn‚es: 
  447.      */
  448.     switch( type )
  449.     {
  450.         case    DTYP_ARBO:
  451.              /* 
  452.               * Charge une arborescence: 
  453.               */
  454.             load_ok = load_file( "Charger l'arborescence", FS_ARBO, &fta );
  455.             break;
  456.  
  457.         case    DTYP_PAGES: 
  458.              /*
  459.               * Charge une ou plusieurs pages ‚cran: 
  460.               */
  461.             load_ok = load_file( "Charger page(s) ‚cran", GF_PAGES_ECRAN, &fta );
  462.             break;
  463.  
  464.         case    DTYP_DATAS: 
  465.              /*
  466.               * Charge un groupe de bases de donn‚es: 
  467.               */
  468.             load_ok = load_file( "Charger base(s) de donn‚es", FS_DATAS, &fta );
  469.             break;
  470.  
  471.         case    DTYP_TEXTS:
  472.             /*
  473.              * Charge un ou un groupe de texte(s): 
  474.              */
  475.             load_ok = load_file( "Charger texte(s)", GF_TEXTES, &fta );
  476.             break;
  477.                 
  478.         case    DTYP_PICS:
  479.             /*
  480.              * Charge une image: 
  481.              */
  482.             load_ok = load_file( "Charger image(s)", F_IMAGE, &fta );
  483.             break;
  484.  
  485.         default:
  486.             ping();
  487.     }
  488.         
  489.     /*
  490.      * Mise … jour des fenˆtres et des infos de la zone de donn‚es: 
  491.      */
  492.     if( load_ok > 0 )
  493.     { /* 
  494.        * Si le chargement s'est correctement effectu‚: 
  495.         * Mise … jour des infos, fenˆtres, ic“ne etc... 
  496.         */
  497.         update_datagroup_info( curr_datagroup, (load_ok==2)? YES1:NO0 );
  498.         
  499.         return    2;        /* Chargement effectu‚ */
  500.     }
  501.     else            
  502.     {    /* 
  503.           * Si Le chargement ne s'est pas effectu‚: 
  504.          */
  505.         return    1;        /* Pas de modif */
  506.     }
  507.  
  508. }
  509.  
  510.  
  511.  
  512.  
  513. /*
  514.  * update_datagroup_info(-)
  515.  *
  516.  * Purpose:
  517.  * --------
  518.  * Mise … jour des infos d'un datagroup 
  519.  * aprŠs un chargement
  520.  *
  521.  * Algorythm:
  522.  * ----------  
  523.  * - M‚morise nom du fichier charg‚
  524.  * - Raffraichit le contenu des fenˆtres
  525.  * - Met a jour les datastates
  526.  *
  527.  * History:
  528.  * --------
  529.  * 1993: fplanque: Created
  530.  * 09.08.94: fplanque: appel … dataDir_setSavState() au lieu de update_datastate... mais ce n'est que provisoire: l'appell … dataDir_setSavState n'est pas r‚cursif vers l'int‚rieur mais vers l'ext‚rieur!!
  531.  */
  532. void    update_datagroup_info(             /* Out: */
  533.             DATAGROUP *curr_datagroup, /* In: Datagroup ds lequel on a chargé */
  534.             int memo )                     /* In: !=0 s'il faut m‚moriser le nom du fichier qui vient d'être chargé pour sauvegarde ultérieure */
  535. {
  536.     DATADIR * pDataDir = curr_datagroup -> root_dir;
  537.  
  538.     /* 
  539.      * Teste s'il faut m‚moriser le nom du fichier: 
  540.      */
  541.     if( memo )
  542.     {    /* 
  543.          * Il faut m‚moriser:
  544.          */
  545.         update_datagroup_filename( curr_datagroup );
  546.     }
  547.         
  548.     /* 
  549.      * Mise … jour des fenˆtres: 
  550.      */
  551.     if ( pDataDir -> nb_dirs )
  552.     {    /* 
  553.          * S'il y a d‚j… des fenˆtres ouvertes sur le dossier concern‚: 
  554.          */
  555.         if ( curr_datagroup -> DataType == DTYP_ARBO )
  556.         {
  557.             signale("Il ne devrait pas y avoir de fenˆtre arbo ouverte!");
  558.         }
  559.         else
  560.         {
  561.             remplace_dir( pDataDir );
  562.         }
  563.     }
  564.  
  565.     /* 
  566.      * Status mise … jour: 
  567.      */
  568.     if( dataDir_getSavState( pDataDir ) == SSTATE_EMPTY )
  569.     {    /*
  570.          * Si le dir ‚tait vide avant:
  571.          * On l'a rempli avec un fichier sauv‚ sur disque:
  572.          */
  573.         dataDir_setSavState( pDataDir, SSTATE_SAVED, TRUE_1 );
  574.     }
  575.     else
  576.     {    /*
  577.          * Si le dir contenait d‚j… qque chose:
  578.          * On l'a modifi‚:
  579.          */
  580.         dataDir_setSavState( pDataDir, SSTATE_MODIFIED, TRUE_1 );
  581.     }
  582. }
  583.          
  584.          
  585.  
  586. /*
  587.  * update_datagroup_filename(-)
  588.  *
  589.  * Purpose:
  590.  * --------
  591.  * Met a jour le nom du fichier associ‚ … un datagroup
  592.  *
  593.  * Algorythm:
  594.  * ----------  
  595.  * Efface l'ancien nom, replace par nouveau
  596.  *
  597.  * Suggest:
  598.  * ------
  599.  * Mettre ca dans un fichier de méthodes pour DATAGROUP
  600.  *
  601.  * History:
  602.  * --------
  603.  * date: user: Created
  604.  */
  605. void    update_datagroup_filename( 
  606.             DATAGROUP *datagroup )        /* In: Datagroup concerné */
  607. {
  608.     /* 
  609.      * Chemin d'accŠs: 
  610.      */
  611.     if ( datagroup -> filepath != NULL )
  612.     {    /* 
  613.          * S'il y avait d‚j… un chemin m‚moris‚: 
  614.          */
  615.         FREE( datagroup -> filepath );        /* On l'efface */
  616.     }
  617.     datagroup -> filepath = STRDUP( G_filepath );    /* Fixe nouveau chemin */
  618.  
  619.     /* 
  620.      * Nom du fichier: 
  621.      */
  622.     strcpy( datagroup -> filename, G_filename );    /* Recopie le nom */
  623.  
  624. }
  625.  
  626.  
  627.  
  628. /*
  629.  * group_directload(-)
  630.  *
  631.  * Purpose:
  632.  * --------
  633.  * Charge un fichier dont on connait d‚j… le chemin d'accŠs 
  634.  * dans un groupe
  635.  * Appell‚ lors du chargement de la config
  636.  *
  637.  * Algorythm:
  638.  * ----------  
  639.  * Appelle directload_file2() avec les bons parametres
  640.  *
  641.  * History:
  642.  * --------
  643.  * 1993: fplanque: Created
  644.  */
  645. void    group_directload( 
  646.             DATAGROUP *curr_datagroup, /* In: DATAGROUP ds lequel on veut charger */
  647.             int file_type,                /* In: Type de fichier à charger */
  648.             char *file_access )            /* In: Chemin d'accès au fichier */
  649. {
  650.     FTA    fta; 
  651.     int    load_ok;
  652.  
  653.     /* 
  654.      * S‚lectionne l'ic“ne: 
  655.      */
  656.     modif_icon( G_desk_params_adr, ROOT, curr_datagroup -> icon_no, SELECTED, TAKE_CTRL );
  657.  
  658.     /* 
  659.      * Fixe les var globales contenant non et path du fichier: 
  660.      */
  661.     if( file_access_extract( file_access ) )
  662.     {
  663.         /* Fixe File Transfer Area: */
  664.         fta .datadir_ptr = &(curr_datagroup -> root_dir);    /* Adr du Ptr sur Dir ppal du datagroup */
  665.     
  666.         /* Charge le fichier: */
  667.         load_ok = directload_file2( file_type, &fta, YES1 );
  668.     
  669.         /* Mise … jour des fenˆtres et des infos de la zone de donn‚es: */
  670.         if ( load_ok > 0 )
  671.         {    /*
  672.                * Si le chargement s'est correctement effectu‚: 
  673.              * Mise … jour des infos, fenˆtres, ic“ne etc... 
  674.              */
  675.             update_datagroup_info( curr_datagroup, (load_ok==2)? YES1:NO0 );
  676.         }
  677.     }
  678.     else
  679.     {
  680.         signale( "Ligne non valide" );        /* PROVISOIRE */
  681.     }
  682.  
  683.     /* 
  684.      * D‚s‚lectionne/R‚affiche l'ic“ne: 
  685.      */
  686.     modif_icon( G_desk_params_adr, ROOT, curr_datagroup -> icon_no, NORMAL, TAKE_CTRL );
  687.  
  688. }
  689.  
  690.  
  691. /*
  692.  * initialiser(-)
  693.  *
  694.  * Purpose:
  695.  * --------
  696.  * initialisation du serveur: RAZ de tous les DATAGROUPS
  697.  *
  698.  * History:
  699.  * --------
  700.  * 1993: fplanque: Created
  701.  */
  702. void    initialiser( void )
  703. {
  704.     /*
  705.      * V‚rifie si le serveur a ‚t‚ modifi‚: 
  706.      */
  707.     int    confirm      = 0;                /* Confirmation? */
  708.  
  709.     /*
  710.      * Selon statut serveur: 
  711.      */
  712.     switch ( get_ServSState() )
  713.     {
  714.         case    SSTATE_SAVED:
  715.             confirm = form_alert( 2, 
  716.                             "[2][|Etes-vous s–r de vouloir|"
  717.                                   "INITIALISER le serveur|"
  718.                                   "maintenant?]"
  719.                                   "[Init.|Annuler]" );
  720.             break;
  721.  
  722.         case    SSTATE_MODIFIED:
  723.             confirm = form_alert( 2, 
  724.                             "[3][ATTENTION: Vous ˆtes sur le|"
  725.                                   "point d'INITIALISER le serveur|"
  726.                                   "actuellement en m‚moire alors|"
  727.                                   "que certaines MODIFICATIONS|"
  728.                                   "n'ont pas ‚t‚ sauv‚es!]"
  729.                                   "[Init?|Annuler]" );
  730.             break;
  731.     }
  732.  
  733.     /*
  734.      * Si on a confirm‚: 
  735.      */
  736.     if ( confirm == 1 )
  737.     {    
  738.         init_serv();
  739.     }
  740. }
  741.                               
  742.                               
  743.  
  744. /*
  745.  * init_serv(-)
  746.  *
  747.  * Purpose:
  748.  * --------
  749.  * Initialisation du serveur:
  750.  * RAZ de tous les DATAGROUPS:
  751.  *
  752.  * History:
  753.  * --------
  754.  * 1993: fplanque: Created
  755.  */
  756. void    init_serv( void )
  757. {
  758.     /* Variables: */
  759.     int            group_no;
  760.     DATAGROUP *    datagroup;        /* Datagroup en cours de traitement */
  761.     DATADIR     *    datadir;            /* Dossier ppal */
  762.     DATATYPE        data_type;        /* Type de donn‚es … effacer */
  763.  
  764.     /* D‚s‚lectionne ic“ne courante: */
  765.     deselect_current();
  766.  
  767.     /* Initialise tous les groupes, 1 par 1: */
  768.     for ( group_no = 0; group_no < NB_DATAGROUPS; group_no++ )
  769.     {
  770.         /*
  771.          * Variables: 
  772.          */
  773.         datagroup = &G_datagroups[ group_no ];    /* Datagroup … traiter */
  774.  
  775.         /*
  776.          * S‚lectionne l'ic“ne: 
  777.          */
  778.         modif_icon( G_desk_params_adr, ROOT, datagroup -> icon_no, SELECTED, TAKE_CTRL );
  779.  
  780.         /*
  781.          * Teste si le groupe n'est pas d‚j… vierge: 
  782.          */
  783.         if( dataGroup_getSavState( datagroup ) )
  784.         {    /*
  785.             * S'il faut initialiser le groupe: 
  786.              * Variables: 
  787.              */
  788.             datadir     = datagroup -> root_dir;        /* Root */
  789.             data_type  = datagroup -> DataType;
  790.         
  791.             /* 
  792.              * Initialisation du datagroup: 
  793.              */
  794.             clearout_datadir( datadir );    /* Vide le dossier ppal */
  795.  
  796.             /*
  797.              * Fermeture des fenˆtres: 
  798.              */
  799.             if ( datadir -> nb_dirs )
  800.             {    /* S'il y a des fenˆtres ouvertes: */
  801.                 /* On les ferme: */
  802.                 close_datawindows( datadir );
  803.             }
  804.  
  805.             /*
  806.              * Effacement du root si n‚cessaire: 
  807.              */
  808.             if ( data_type == DTYP_ARBO )
  809.             {    /*
  810.                   * Si on a ‚ffac‚ l'arbo: 
  811.                  * Effacement du dossier: 
  812.                  */
  813.                 efface_arbodir( datadir );
  814.                 /*
  815.                  * Datagroup n'a plus de root: 
  816.                  */
  817.                 datagroup -> root_dir = NULL;
  818.             }
  819.  
  820.             /*
  821.              * Init varibales associ‚es: 
  822.              */
  823.             init_vars_datagroup( datagroup );
  824.  
  825.         }
  826.  
  827.         /*
  828.          * D‚s‚lectionne/R‚affiche l'ic“ne: 
  829.          */
  830.         modif_icon( G_desk_params_adr, ROOT, datagroup -> icon_no, NORMAL, TAKE_CTRL );
  831.  
  832.     }
  833. }
  834.  
  835.  
  836.  
  837. /*
  838.  * efface_datas(-)
  839.  *
  840.  * Purpose:
  841.  * --------
  842.  * Efface un datagroup
  843.  *
  844.  * Algorythm:
  845.  * ----------  
  846.  * - Contr“le si certaines pages du DGroup a effacer
  847.  *   ne sont pas en cours d'‚dition 
  848.  *   Auquel cas on demande confirmation
  849.  * - Efface le DATAGROUP
  850.  *
  851.  * History:
  852.  * --------
  853.  * 1993: fplanque: Created
  854.  */
  855. int    efface_datas(                           /* Out Reporte si on a effacé ou pas */
  856.             DATAGROUP    *curr_datagroup )    /* In: DATAGROUP à effacer */
  857. {
  858.     static    char     *conf1="[3][|FERMER et ABANDONNER|"
  859.                                         "toutes les bases de|"
  860.                                         "donn‚es en cours|"
  861.                                         "d'DITION?]"
  862.                                         "[Confirmer|Annuler]";
  863.     char        *replace;        /* Texte sp‚cifique en fnct du type de donn‚es */
  864.     int        resultat;        /* R‚sultat de la confirmation? */
  865.  
  866.     DATADIR    *    datadir      = curr_datagroup -> root_dir;    /* Dir ppal du datagroup */
  867.     DATATYPE        data_type = curr_datagroup -> DataType;
  868.  
  869.     /* 
  870.      * Contr“le si certaines pages ne sont pas en cours d'‚dition: 
  871.      */
  872.     if ( datadir -> nb_edits )
  873.     {    /* S'il y a des donn‚es en cours d'‚dition: */
  874.         /* printf("There are %d windows to close!\n", curr_datagroup -> nb_edits); */
  875.         switch( data_type )
  876.         {
  877.             case    DTYP_ARBO:
  878.                 replace = "tes les pages arbo|en cours d'DITION?|     ";
  879.                 break;
  880.  
  881.             case    DTYP_PAGES:
  882.                 replace = "tes les pages ‚cran|en cours d'DITION?|    ";
  883.                 break;
  884.  
  885.             case    DTYP_DATAS:
  886.                 replace = "tes les bases de|donn‚es en cours|d'DITION?";
  887.                 break;
  888.                     
  889.             case    DTYP_TEXTS:
  890.                 replace = "s les textes|en cours d'DITION?|           ";
  891.                 break;
  892.  
  893.             case    DTYP_PICS:
  894.                 replace = "tes les images|en cours d'DITION?|         ";
  895.                 break;
  896.  
  897.         }
  898.         memcpy( conf1 + 29, replace , 44);
  899.  
  900.         /* 
  901.          * Affiche alerte: 
  902.          */
  903.         resultat=form_alert( 2, conf1 );                /* Alerte */
  904.     }
  905.     else    
  906.     {    /* 
  907.          * Si pas de fen d'‚dition ouverte: 
  908.          */
  909.         resultat = 1;        /* On peut effacer */
  910.     }
  911.  
  912.     
  913.     if ( resultat == 1 )
  914.     {    /*
  915.          * Si on est autoris‚ … effacer le DATAGROUP:
  916.          * Vide le dossier-root: 
  917.          */
  918.         clearout_datadir( datadir );
  919.  
  920.         /*
  921.          * Mise … jour des fenˆtres et des dossiers: 
  922.          */
  923.         if ( data_type == DTYP_ARBO )
  924.         {    /*
  925.              * Si on a ‚ffac‚ l'arbo:
  926.              * Fermeture des fenˆtres: 
  927.              */
  928.             if ( datadir -> nb_dirs )
  929.             {    /*
  930.                  * S'il y a des fenˆtres ouvertes:
  931.                  * On les ferme: 
  932.                  */
  933.                 close_datawindows( datadir );
  934.             }
  935.     
  936.             /*
  937.              * Effacement du dossier: 
  938.              */
  939.             efface_arbodir( datadir );
  940.             /*
  941.              * Datagroup n'a plus de root: 
  942.              */
  943.             curr_datagroup -> root_dir = NULL;
  944.         }
  945.         else
  946.         {    /*
  947.              * Si on a effac‚ un datagroup normal: 
  948.              */
  949.             if ( datadir -> nb_dirs )
  950.             {    /* 
  951.                  * S'il y a d‚j… des fenˆtres ouvertes: 
  952.                  */
  953.                 remplace_dir( datadir );
  954.             }
  955.         }
  956.  
  957.         /*
  958.          * Init variables associ‚es: 
  959.          */
  960.         init_vars_datagroup( curr_datagroup );
  961.  
  962.         return    1;        /* On a effac‚ */
  963.     }
  964.  
  965.     return    0;        /* on a PAS effac‚ */        
  966. }
  967.  
  968.  
  969.  
  970. /*
  971.  * init_vars_datagroup(-)
  972.  *
  973.  * Purpose:
  974.  * --------
  975.  * Initialise variables datagroup
  976.  *
  977.  * Notes:
  978.  * ------
  979.  * Appell‚ lors de la construction d'un DATAGROUP
  980.  * Egalement appell‚ lorsque l'on efface le contenu complet d'un DATAGROUP
  981.  *
  982.  * History:
  983.  * --------
  984.  * 1993: fplanque: Created
  985.  * 08.08.94: fplanque: vir‚ appel a set_datastate() obsolŠte; du coup on ne signale pas le groupe comme vierge. est-ce fait ailleurs?|
  986.  */
  987. void    init_vars_datagroup( 
  988.             DATAGROUP *datagroup )    /* In: DATAGROUP à initialiser */
  989. {
  990.  
  991.     /* 
  992.      * Infos sur Mise … jour de la zone de donn‚es: 
  993.      */
  994.     /* set_datastate( datagroup, EMPTY ); */
  995.  
  996.     /*
  997.      * Supprime nom du fichier associ‚: 
  998.      */
  999.     datagroup -> filename[0]    = '\0';    /* Pas de fichier associ‚ */
  1000.     datagroup -> filepath        = NULL;    /* Pas de r‚pertoire */                
  1001.  
  1002. }
  1003.  
  1004.